<template>
  <div class='sub-category'>
    <div class="container">
      <!-- 组件化（功能） -->
      <!-- 面包屑 -->
      <SubBread />
      <!-- 筛选体条件区域 -->
      <SubFilter />
      <!-- 商品列表 -->
      <div class="goods-list">
        <!-- 排序组件 -->
        <SubSort />
        <!-- 商品列表 -->
        <SubList />
      </div>
    </div>
  </div>
</template>

<script>
import { useRoute } from 'vue-router'
import { ref, onMounted, provide } from 'vue'

import { findSubCategoryFilter } from '@/api/category'

// 导入面包屑
import SubBread from './components/sub-bread'
// 导入筛选体条件区域
import SubFilter from './components/sub-filter'
// 导入排序组件
import SubSort from './components/sub-sort'
// 导入商品列表
import SubList from './components/sub-list'

export default {
  name: 'SubCategory',
  components: {
    SubBread,
    SubFilter,
    SubSort,
    SubList
  },
  setup () {
    const subCateData = ref({})
    const route = useRoute()
    provide('subCateData', subCateData)

    // 提供过滤条件数据(列表后台接口需要的条件)
    /**
     * 列表过滤/筛选（联动）（组件化）实现步骤：
     * 1. 在vuex或者使用依赖注入，提供过滤条件的数据（共享）
     * 2. 在过滤条件的组件中获取上一步中提供的过滤条件的数据=》点击过滤条件，修改过滤条件的数据
     * 3. 在列表组件中获取上一步中提供的过滤条件的数据=》watch监听过滤条件的修改变化，拿到最新修改的过滤条件的参数，重新请求列表数据
     */
    const filterParams = ref({
      // 筛选条件数据
      sortField: null, // 排序类别
      attrs: [], // 商品属性
      brandId: null // 品牌名称
    })
    provide('filterParams', filterParams)

    const getSubCateData = async () => {
      const { result } = await findSubCategoryFilter(route.params.id)
      // console.log(result)
      /**
       * 添加筛选条件默认全部条件数据和选中状态数据
       * 1.品牌
       * 后台品牌添加一个是否选中的属性 =》 false
       */
      result.brands.forEach(brand => {
        brand.selected = false
      })
      // 自己添加的全部条件，默认选中
      result.brands.unshift({
        id: null,
        name: '全部',
        selected: true
      })
      // 2.属性(动态多个)
      result.saleProperties.forEach(item => {
        item.properties.forEach(per => {
          per.selected = false
        })
        item.properties.unshift({
          id: null,
          name: '全部',
          selected: true
        })
      })
      subCateData.value = result
    }
    onMounted(() => {
      getSubCateData()
    })
    return { subCateData }
  }
}
</script>
<style scoped lang='less'>
.goods-list {
  background: #fff;
  padding: 0 25px;
  margin-top: 25px;
}
</style>
